﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace CoTuong
{
    [Serializable]
    public class QuanTuong : QuanCo
    {
        public QuanTuong(Texture2D texture2D, int dong, int cot, int quan, Boolean isSelected)
            : base(texture2D, dong, cot, quan, isSelected)
        {

        }

        public override void Update(GameTime gameTime)
        {
            if (isSelected == true)
            {
                int tempCot = cot;
                int tempDong = dong;
                bool flag = false;

                #region Kiểm Tra Và Di Chuyển Góc Chéo Trái Phía Trên
                if (tempDong >= 2 && tempCot >= 2)
                {
                    if (quan == 0)
                    {
                        if (QuanLyQuanCo.ktQuanCo[dong - 1, cot - 1] == 0 &&
                            QuanLyQuanCo.ktQuanCo[dong - 2, cot - 2] != 1 && dong >= 7)
                        {
                            flag = true;    
                        }
                    }
                    else
                    {
                        if (QuanLyQuanCo.ktQuanCo[dong - 1, cot - 1] == 0 &&
                            QuanLyQuanCo.ktQuanCo[dong - 2, cot - 2] != 2)
                        {
                            flag = true;
                        }
                    }
                    if (flag == true)
                    {
                        this.diChuyen(dong - 2, cot - 2);
                    }
                }
                #endregion

                #region Kiểm Tra Và Di Chuyển Góc Chéo Phải Phía Trên
                tempCot = cot;
                tempDong = dong;
                flag = false;
                if (dong >= 2 && cot <= 6)
                {
                    if (quan == 0)
                    {
                        if (QuanLyQuanCo.ktQuanCo[dong - 1, cot + 1] == 0 &&
                            QuanLyQuanCo.ktQuanCo[dong - 2, cot + 2] != 1 && dong >= 7)
                        {
                            flag = true;
                        }
                    }
                    else
                    {
                        if (QuanLyQuanCo.ktQuanCo[dong - 1, cot + 1] == 0 &&
                            QuanLyQuanCo.ktQuanCo[dong - 2, cot + 2] != 2)
                        {
                            flag = true;
                        }
                    }

                    if (flag == true)
                    {
                        this.diChuyen(dong - 2, cot + 2);
                    }
                }
                #endregion

                #region Kiểm Tra Và Di Chuyển Góc Chéo Phải Phía Dưới
                tempCot = cot;
                tempDong = dong;
                flag = false;
                if (dong <= 7 && cot <= 6)
                {
                    if (quan == 0)
                    {
                        if (QuanLyQuanCo.ktQuanCo[dong + 1, cot + 1] == 0 &&
                            QuanLyQuanCo.ktQuanCo[dong + 2, cot + 2] != 1)
                        {
                            flag = true;
                        }
                    }
                    else
                    {
                        if (QuanLyQuanCo.ktQuanCo[dong + 1, cot + 1] == 0 &&
                            QuanLyQuanCo.ktQuanCo[dong + 2, cot + 2] != 2 && dong <= 2)
                        {
                            flag = true;
                        }
                    }

                    if (flag == true)
                    {
                        this.diChuyen(dong + 2, cot + 2);
                    }    

                }

                #endregion

                #region Kiểm Tra Và Di Chuyển Góc Chéo Trái Phía Dưới
                tempCot = cot;
                tempDong = dong;
                flag = false;
                if (dong <= 7 && cot >= 2)
                {
                    if (quan == 0)
                    {
                        if (QuanLyQuanCo.ktQuanCo[dong + 1, cot - 1] == 0 &&
                            QuanLyQuanCo.ktQuanCo[dong + 2, cot - 2] != 1)
                        {
                            flag = true;
                        }
                    }
                    else
                    {
                        if (QuanLyQuanCo.ktQuanCo[dong + 1, cot - 1] == 0 &&
                            QuanLyQuanCo.ktQuanCo[dong + 2, cot - 2] != 2 && dong <= 2)
                        {
                            flag = true;
                        }
                    }

                    if (flag == true)
                    {
                        this.diChuyen(dong + 2, cot - 2);
                    }
                }
                #endregion

                ViTriDiChuyen.X = -framesizeX;
                ViTriDiChuyen.Y = -framesizeY;
            }

            base.Update(gameTime);
        }

        public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
        {
            if (isSelected == true)
            {// Quân cờ đã được chọn, khi đó ta sẽ vẽ các điểm có thể di chuyển
                
                #region Vẽ Vị Trí Di Chuyển Góc Chéo Trái Phía Trên
                if (dong >= 2 && cot >= 2)
                {
                    if (quan == 0)
                    {
                        if (QuanLyQuanCo.ktQuanCo[dong - 1, cot - 1] == 0 &&
                            QuanLyQuanCo.ktQuanCo[dong - 2, cot - 2] != 1 && dong >= 7)
                            this.VeBuocDiQuanCo(dong - 2, cot - 2, spriteBatch);
                    }
                    else
                    {
                        if (QuanLyQuanCo.ktQuanCo[dong - 1, cot - 1] == 0 &&
                            QuanLyQuanCo.ktQuanCo[dong - 2, cot - 2] != 2)
                            this.VeBuocDiQuanCo(dong - 2, cot - 2, spriteBatch);
                    }
                }
                #endregion

                #region Vẽ Vị Trí Di Chuyển Góc Chéo Phải Phía Trên
                if (dong >= 2 && cot <= 6)
                {
                    if (quan == 0)
                    {
                        if (QuanLyQuanCo.ktQuanCo[dong - 1, cot + 1] == 0 &&
                            QuanLyQuanCo.ktQuanCo[dong - 2, cot + 2] != 1 && dong >= 7)
                            this.VeBuocDiQuanCo(dong - 2, cot + 2, spriteBatch);
                    }
                    else
                    {
                        if (QuanLyQuanCo.ktQuanCo[dong - 1, cot + 1] == 0 &&
                            QuanLyQuanCo.ktQuanCo[dong - 2, cot + 2] != 2)
                            this.VeBuocDiQuanCo(dong - 2, cot + 2, spriteBatch);
                    }

                }
                #endregion

                #region Vẽ Vị Trí Di Chuyển Góc Chéo Phải Phía Dưới
                if (dong <= 7 && cot <= 6)
                {
                    if (quan == 0)
                    {
                        if (QuanLyQuanCo.ktQuanCo[dong + 1, cot + 1] == 0 &&
                            QuanLyQuanCo.ktQuanCo[dong + 2, cot + 2] != 1)
                            this.VeBuocDiQuanCo(dong + 2, cot + 2, spriteBatch);

                    }
                    else
                    {
                        if (QuanLyQuanCo.ktQuanCo[dong + 1, cot + 1] == 0 &&
                            QuanLyQuanCo.ktQuanCo[dong + 2, cot + 2] != 2 && dong <= 2)
                            this.VeBuocDiQuanCo(dong + 2, cot + 2, spriteBatch);
                    }
                }
                #endregion

                #region Vẽ Vị Trí Di Chuyển Góc Chéo Trái Phía Dưới
                if (dong <= 7 && cot >= 2)
                {
                    if (quan == 0)
                    {
                        if (QuanLyQuanCo.ktQuanCo[dong + 1, cot - 1] == 0 &&
                            QuanLyQuanCo.ktQuanCo[dong + 2, cot - 2] != 1)
                            this.VeBuocDiQuanCo(dong + 2, cot - 2, spriteBatch);
                    }
                    else 
                    {
                        if (QuanLyQuanCo.ktQuanCo[dong + 1, cot - 1] == 0 &&
                            QuanLyQuanCo.ktQuanCo[dong + 2, cot - 2] != 2 && dong <= 2)
                            this.VeBuocDiQuanCo(dong + 2, cot - 2, spriteBatch);
                    }
                }
                #endregion
            }

            base.Draw(gameTime, spriteBatch);
        }

    }
}
